 /*******************************************************************************
  * Copyright (c) 2004, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/

 package org.eclipse.osgi.internal.resolver;

 import java.util.*;
 import org.eclipse.osgi.framework.internal.core.Constants;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.service.resolver.ExportPackageDescription;

 public class ExportPackageDescriptionImpl extends BaseDescriptionImpl implements ExportPackageDescription {
     public static final String EQUINOX_EE = "x-equinox-ee"; //$NON-NLS-1$
 private static final Integer EQUINOX_EE_DEFAULT = new Integer (-1);
     private String [] uses;
     private Map attributes;
     private BundleDescription exporter;
     private String exclude;
     private String include;
     private String [] friends;
     private String [] mandatory;
     private Boolean internal = Boolean.FALSE;
     private int equinox_ee = -1;
     private boolean root;
     private int tableIndex;

     public Map getDirectives() {
         Map result = new HashMap(5);
         if (uses != null)
             result.put(Constants.USES_DIRECTIVE, uses);
         if (exclude != null)
             result.put(Constants.EXCLUDE_DIRECTIVE, exclude);
         if (include != null)
             result.put(Constants.INCLUDE_DIRECTIVE, include);
         if (mandatory != null)
             result.put(Constants.MANDATORY_DIRECTIVE, mandatory);
         if (friends != null)
             result.put(Constants.FRIENDS_DIRECTIVE, friends);
         result.put(Constants.INTERNAL_DIRECTIVE, internal);
         result.put(EQUINOX_EE, equinox_ee == -1 ? EQUINOX_EE_DEFAULT : new Integer (equinox_ee));
         return result;
     }

     public Object getDirective(String key) {
         if (key.equals(Constants.USES_DIRECTIVE))
             return uses;
         if (key.equals(Constants.EXCLUDE_DIRECTIVE))
             return exclude;
         if (key.equals(Constants.INCLUDE_DIRECTIVE))
             return include;
         if (key.equals(Constants.MANDATORY_DIRECTIVE))
             return mandatory;
         if (key.equals(Constants.FRIENDS_DIRECTIVE))
             return friends;
         if (key.equals(Constants.INTERNAL_DIRECTIVE))
             return internal;
         if (key.equals(EQUINOX_EE))
             return equinox_ee == -1 ? EQUINOX_EE_DEFAULT : new Integer (equinox_ee);
         return null;
     }

     public Object setDirective(String key, Object value) {
         if (key.equals(Constants.USES_DIRECTIVE))
             return uses = (String []) value;
         if (key.equals(Constants.EXCLUDE_DIRECTIVE))
             return exclude = (String ) value;
         if (key.equals(Constants.INCLUDE_DIRECTIVE))
             return include = (String ) value;
         if (key.equals(Constants.MANDATORY_DIRECTIVE))
             return mandatory = (String []) value;
         if (key.equals(Constants.FRIENDS_DIRECTIVE))
             return friends = (String []) value;
         if (key.equals(Constants.INTERNAL_DIRECTIVE))
             return internal = (Boolean ) value;
         if (key.equals(EQUINOX_EE)) {
             equinox_ee = ((Integer ) value).intValue();
             return value;
         }
         return null;
     }

     public void setDirectives(Map directives) {
         if (directives == null)
             return;
         uses = (String []) directives.get(Constants.USES_DIRECTIVE);
         exclude = (String ) directives.get(Constants.EXCLUDE_DIRECTIVE);
         include = (String ) directives.get(Constants.INCLUDE_DIRECTIVE);
         mandatory = (String []) directives.get(Constants.MANDATORY_DIRECTIVE);
         friends = (String []) directives.get(Constants.FRIENDS_DIRECTIVE);
         internal = (Boolean ) directives.get(Constants.INTERNAL_DIRECTIVE);
         equinox_ee = ((Integer ) directives.get(EQUINOX_EE)).intValue();
     }

     public Map getAttributes() {
         return attributes;
     }

     public BundleDescription getSupplier() {
         return getExporter();
     }

     public BundleDescription getExporter() {
         return exporter;
     }

     public boolean isRoot() {
         return root;
     }

     protected void setAttributes(Map attributes) {
         this.attributes = attributes;
     }

     protected void setExporter(BundleDescription exporter) {
         this.exporter = exporter;
     }

     protected void setRoot(boolean root) {
         this.root = root;
     }

     public String toString() {
         return "Export-Package: " + getName() + "; version=\"" + getVersion() + "\""; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
 }

     int getTableIndex() {
         return tableIndex;
     }

     void setTableIndex(int tableIndex) {
         this.tableIndex = tableIndex;
     }
 }

